﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Security.Cryptography;
using Microsoft.Security.Application;

#pragma warning disable 0618 // disable AntiXX is obsolete warning

public partial class GebruikerOverzicht : System.Web.UI.Page
{
    private SqlCommand cmd;
    private SqlDataReader reader;
    int klantNr;
    int boekNr;
    int rowNr = 1;
    int aantalMiles;

    protected void Page_Load(object sender, EventArgs e)
    {
        // A counter in a session for displaying booked flights
        if (!IsPostBack)
            Session["Count"] = null;

        if (Session["Count"] == null)
        {
            Session["Count"] = rowNr;
        }
        else
        {
            rowNr = Convert.ToInt32(Session["Count"]);
        }
        
        // check if cookie is available, else, redirect
        if (Request.Cookies["InHollandAir"] != null)
            haalKlantGegevensOp();
        else
            Response.Redirect("Login.aspx");
    }
    public void haalKlantGegevensOp()
    {
        // Decrypt cookie, gebruik sessie uit cookie om persoon te identificeren en
        // gegevens over de ingelogde persoon uit de database te halen.
        try
        {
            string sessionid = Request.Cookies["InHollandAir"]["1"];

            if (ConnectDB._Connection.State == ConnectionState.Open)
                ConnectDB._Connection.Close();
            ConnectDB._Connection.Open();
            cmd = new SqlCommand(sp.getKlantGegevens, ConnectDB._Connection);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter session = cmd.Parameters.Add("@sessionid", SqlDbType.VarChar);

            session.Value = sessionid;
            reader = cmd.ExecuteReader();
            printGegevens();
            try
            {
                if (ConnectDB._Connection.State == ConnectionState.Open)
                    ConnectDB._Connection.Close();
                ConnectDB._Connection.Open();
                cmd = new SqlCommand(sp.getVluchtGegevens, ConnectDB._Connection);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter klantnummer = cmd.Parameters.Add("@klantnummer", SqlDbType.Int);
                SqlParameter rownummer = cmd.Parameters.Add("@rownummer", SqlDbType.Int);
                klantnummer.Value = klantNr;
                rownummer.Value = Convert.ToInt32(Session["Count"]);
                reader = cmd.ExecuteReader();
                printVluchtGegevens();
                
            }
            catch (SqlException e)
            {
                LogError.writeToLogFile(e.Message);   
            }
            finally
            {
                reader.Close();
                ConnectDB._Connection.Close();
            }

        }

        catch (SqlException e)
        {
            lbl_foutmelding.Text = Fout.databaseOffline;
            LogError.writeToLogFile(e.Message);
        }
        finally
        {
            reader.Close();
            ConnectDB._Connection.Close();
        }

    }
    public void printGegevens()
    {
        // Toon de gegevens uit de database aan de gebruiker, inclusief output encoding
        while (reader.Read())
        {
            klantNr = int.Parse(reader["Klantnummer"].ToString());
            lbl_voornaam.Text = AntiXss.HtmlEncode(reader["Voornaam"].ToString());
            lbl_tussenvoegsel.Text = AntiXss.HtmlEncode(reader["Tussenvoegsel"].ToString());
            lbl_achternaam.Text = AntiXss.HtmlEncode(reader["Achternaam"].ToString());
            lbl_adres.Text = AntiXss.HtmlEncode(reader["Straatnaam"].ToString()) + " " + AntiXss.HtmlEncode(reader["Huisnummer"].ToString());
            lbl_postcode.Text = AntiXss.HtmlEncode(reader["Postcode"].ToString());
            lbl_geboortedatum.Text = AntiXss.HtmlEncode(reader["Geboortedatum"].ToString());
            lbl_telefoonnummer.Text = AntiXss.HtmlEncode(reader["Telefoonnummer"].ToString());
            lbl_email.Text = AntiXss.HtmlEncode(reader["Emailadres"].ToString());
            lbl_miles.Text = AntiXss.HtmlEncode(reader["InHollandMiles"].ToString());

           

        }

    }
    public void printVluchtGegevens()
    {
        // toon vluchtgegevens a.d.h.v. het nummer in de counter sessie
        while (reader.Read())
        {
            boekNr = int.Parse(reader["Boekingsnummer"].ToString());
            lbl_vertrek.Text = AntiXss.HtmlEncode(reader["LuchthavenNaam"].ToString()) + ", " + AntiXss.HtmlEncode(reader["VertrekStad"].ToString() + ", " + AntiXss.HtmlEncode(reader["VertrekLand"].ToString())); //Locatie in SQL query
            lbl_bestemming.Text = AntiXss.HtmlEncode(reader["BestemmingNaam"].ToString()) + ", " + AntiXss.HtmlEncode(reader["BestemmingStad"].ToString() + ", " + AntiXss.HtmlEncode(reader["BestemmingLand"].ToString())); //Locatie in SQL query
            lbl_prijs.Text = AntiXss.HtmlEncode(reader["Prijs"].ToString());
            aantalMiles = int.Parse(reader["Prijs"].ToString());
            lbl_aantalpersonen.Text = AntiXss.HtmlEncode(reader["AantalPersonen"].ToString());
            lbl_vertrektijd.Text = AntiXss.HtmlEncode(reader["Vertrektijd"].ToString());
            lbl_boekingstijd.Text = AntiXss.HtmlEncode(reader["Boekingstijd"].ToString());
            DateTime retour = (DateTime)reader["Retourtijd"];
            if (retour.Year != 1800)
            {
                lbl_retour_tijd.Text = AntiXss.HtmlEncode(reader["Retourtijd"].ToString());
                lbl_retour_tijd.Visible = true;
                lbl_retour_tijd_text.Visible = true;
            }
            else
            {
                lbl_retour_tijd.Visible = false;
                lbl_retour_tijd_text.Visible = false;
            }

            // annuleren alleen mogelijk als de vlucht nog niet vertrokken is
            DateTime vertrektijd = (DateTime)reader["Vertrektijd"];
            if (vertrektijd <= DateTime.Now)
                btn_annuleer.Enabled = false;
            else
                btn_annuleer.Enabled = true;

          
        }
    }

    // counter handlers
    protected void btn_vorige_Click(object sender, EventArgs e)
    {
        Session["Count"] = --rowNr;
        
    }
    protected void btn_volgende_Click(object sender, EventArgs e)
    {
        Session["Count"] = ++rowNr;
    }

    // verwijder vlucht uit database en geef de klant miles terug
    protected void btn_annuleer_Click(object sender, EventArgs e)
    {
        try
        {
        if (ConnectDB._Connection.State == ConnectionState.Open)
            ConnectDB._Connection.Close();
        
        ConnectDB._Connection.Open();
        SqlCommand deleteVlucht = new SqlCommand(sp.setDeleteVlucht, ConnectDB._Connection);
        deleteVlucht.CommandType = CommandType.StoredProcedure;

        SqlParameter boeknummer = deleteVlucht.Parameters.Add("@boeknr", SqlDbType.Int);
        SqlParameter miles = deleteVlucht.Parameters.Add("@miles", SqlDbType.Int);
        SqlParameter klant = deleteVlucht.Parameters.Add("@klantnummer", SqlDbType.Int);

        klant.Value = klantNr;
        boeknummer.Value = boekNr;
        miles.Value = aantalMiles;

       
        deleteVlucht.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            lbl_foutmelding.Text = Fout.databaseOffline;
            LogError.writeToLogFile(ex.Message);
        }
        finally
        {
            ConnectDB._Connection.Close();
        }
        Response.Redirect("GebruikerOverzicht.aspx");
    }
}

